package Modelo;
import java.util.*;

import Controlador.Sistema;
import DAO.DAOReserva;
import DAO.dtoAlquiler;


public class Alquiler {
	
	private Date fechaInicio;
	private Date fechaFin;
	private String tipoModelo;
	private String estado;
	private Date fechaVigencia;
	private int tanqueLimite;
	private float costoAlquiler;
	private float costoDevolucion;
	private Automovil automovil;
	private  int codigoDescuento;
	//private Usuario usuario;
	
	
	/**
	 * @param fechaInicio
	 * @param fechaFin
	 * @param tipoModelo
	 * @param estado
	 * @param fechaVigencia
	 * @param tanqueLimite
	 * @param costoAlquiler
	 * @param costoDevolucion
	 * @param automovil
	 */
	public Alquiler(Date fechaInicio, Date fechaFin, String tipoModelo,
			String estado, Date fechaVigencia, int tanqueLimite,
			float costoAlquiler, float costoDevolucion, Automovil automovil) {
		super();
		this.fechaInicio = fechaInicio;
		this.fechaFin = fechaFin;
		this.tipoModelo = tipoModelo;
		this.estado = estado;
		this.fechaVigencia = fechaVigencia;
		this.tanqueLimite = tanqueLimite;
		this.costoAlquiler = costoAlquiler;
		this.costoDevolucion = costoDevolucion;
		this.automovil = automovil;
	}


	/**
	 * @return the fechaInicio
	 */
	public Date getFechaInicio() {
		return fechaInicio;
	}


	/**
	 * @param fechaInicio the fechaInicio to set
	 */
	public void setFechaInicio(Date fechaInicio) {
		this.fechaInicio = fechaInicio;
	}


	/**
	 * @return the fechaFin
	 */
	public Date getFechaFin() {
		return fechaFin;
	}


	/**
	 * @param fechaFin the fechaFin to set
	 */
	public void setFechaFin(Date fechaFin) {
		this.fechaFin = fechaFin;
	}


	/**
	 * @return the tipoModelo
	 */
	public String getTipoModelo() {
		return tipoModelo;
	}


	/**
	 * @param tipoModelo the tipoModelo to set
	 */
	public void setTipoModelo(String tipoModelo) {
		this.tipoModelo = tipoModelo;
	}


	/**
	 * @return the estado
	 */
	public String getEstado() {
		return estado;
	}


	/**
	 * @param estado the estado to set
	 */
	public void setEstado(String estado) {
		this.estado = estado;
	}


	/**
	 * @return the fechaVigencia
	 */
	public Date getFechaVigencia() {
		return fechaVigencia;
	}


	/**
	 * @param fechaVigencia the fechaVigencia to set
	 */
	public void setFechaVigencia(Date fechaVigencia) {
		this.fechaVigencia = fechaVigencia;
	}


	/**
	 * @return the tanqueLimite
	 */
	public int getTanqueLimite() {
		return tanqueLimite;
	}


	/**
	 * @param tanqueLimite the tanqueLimite to set
	 */
	public void setTanqueLimite(int tanqueLimite) {
		this.tanqueLimite = tanqueLimite;
	}


	/**
	 * @return the costoAlquiler
	 */
	public float getCostoAlquiler() {
		return costoAlquiler;
	}


	/**
	 * @param costoAlquiler the costoAlquiler to set
	 */
	public void setCostoAlquiler(float costoAlquiler) {
		this.costoAlquiler = costoAlquiler;
	}


	/**
	 * @return the costoDevolucion
	 */
	public float getCostoDevolucion() {
		return costoDevolucion;
	}


	/**
	 * @param costoDevolucion the costoDevolucion to set
	 */
	public void setCostoDevolucion(float costoDevolucion) {
		this.costoDevolucion = costoDevolucion;
	}


	/**
	 * @return the automovil
	 */
	public Automovil getAutomovil() {
		return automovil;
	}


	/**
	 * @param automovil the automovil to set
	 */
	public void setAutomovil(Automovil automovil) {
		this.automovil = automovil;
	}
	
	/**
	 * Crea el alquiler a partir de una reserva
	 * Falta la persistencia
	 * Falta que guarde los comentarios del cliente
	 *
	 * @param res
	 * @param comentarios
	 * @return
	 */
	public static Alquiler confirmarReserva(DAOReserva res, String comentarios , EstrategiaCosto descuento, int kilometraje)
	{
		java.util.Date fechaInicio = new java.util.Date();
		java.util.Date fechaFin = new java.util.Date(); // setear bien fecha de inicio y fin
		Automovil auto = Sistema.Getinstancia().BuscarAutomovil(res.getPatente());
		
		float costo = auto.getModelo().getCostoAlquilerDia();

		// falta setear el costo del automovil, y ver que es el costo devolucion...
		Alquiler alq = new Alquiler(fechaInicio, fechaFin, res.getModelo(), "A", fechaFin, 0, descuento.calcularDescuento(kilometraje, 15, costo), 0, auto);
		
		return alq;
	}
	
	public dtoAlquiler getDtoAlquiler(){
		dtoAlquiler nAlq = new dtoAlquiler(this.fechaInicio.toString(), this.fechaFin.toString(), this.tipoModelo, this.estado, this.fechaVigencia.toString(), String.valueOf(this.tanqueLimite), String.valueOf(this.costoAlquiler), String.valueOf(this.costoAlquiler), this.automovil.getPatente());
		return nAlq;
	}
	
	/*
	public static Alquiler CrearAlquiler(
			String desde,
			String hasta,
			Integer dni, 
			Integer limiteTanque,
			float costoAlquiler,
			float costoDevolucion,
			String patente) {
		
		String modelo = "";
		// String patente = (Sistema.Getinstancia().BuscarAutomovil(patente)).getPatente()
		
		
		;
		
	}
	
*/
}
